<?php
/**
 * 上传文件处理类，所以文件上传处理的功能都在些处
 * create by shenjun(alex)
 * create on 2008-12-28
 * 
 * last modify on 2009-04-09
 * @copyright 0.6
 */
class upload{
	private $type;	#允许上传的文件类型
	private $size;  #允许上传的文件大小
	public $dir;		#文件上传的存放路径
	private $num=1;		#同一时间上传文件的记数器，计数量
	private $file_name;	#设置上传的文件的文件名包括扩展名，暂时只支持单个文件上传
	function __construct(){
		$this->type=&get_config('upload_type');
		$this->size=&get_config('upload_size');
		$this->dir=&get_config('upload_dir');
	}
	#开始上传文件
	#$name可以为指字存文件的文件名，$path可以指定文件存放的路径
	#返为0为上传失败，1为不允上传，2为文件超过大小，3为文件类型不对，上传成功直接返回新的文件名
	function upload($file,$name=null,$path=null){
		if(!get_config('upload')){	#如果配置为不允许上传
			return 1;
		}
		if (is_array($_FILES[$file]['name'])) {
			return $this->up_multi_img($file,$name,$path);
		}else{
			return $this->up_single_img($file,$name,$path);
		}
	}
	#检查文件大小
	private function check_size($file){
		if($this->size==0){	#如果配置文件为不限制大小
			return true;
		}
		if((filesize($file)/1024)>$this->size){ #比较两个文件的大小
			return false;
		}else{
			return true;
		}
	}
	#检查文件扩展名
	private function check_type($file){
		$type=strtolower(substr($file,strrpos($file,".")+1));
		if(in_array($type,$this->type)){
			return true;
		}else{
			return false;
		}
	}
	#单个上传文件
	private function up_single_img($file,$name,$path){
		$tmp_file=$_FILES[$file]['tmp_name'];
		$file=$_FILES[$file]['name'];
		if(!$this->check_size($tmp_file)){	#如果上传文件超过允许大小
			return 2;
		}
		if(!$this->check_type($file)){	#检查文件名是未合要求
			return 3;
		}
		$type=strtolower(substr($file,strrpos($file,".")+1));
		if (empty($this->file_name)) {
			$new_name=is_null($name)?date("YmdHis").$this->num.'.'.$type:$name;
		}else{
			$new_name=$this->file_name;
		}
		$dir=is_null($path)?$this->dir:$path;
		$this->num++;
		if (move_uploaded_file($tmp_file,DOCUMENT_ROOT.'/'.$dir.'/'.$new_name)){
			return $new_name;
		}else{
			return 0;
		}
	}
	#多个文件上传
	private function up_multi_img($file,$name,$path){
		$img_num=count($_FILES[$file]['name']);
		$upload=$_FILES[$file];
		$file_name=array();
		for ($i=0;$i<$img_num;$i++){
			$tmp_file=$upload['tmp_name'][$i];
			$file=$upload['name'][$i];
			if(!$this->check_size($tmp_file)){	#如果上传文件超过允许大小
				return 2;
			}
			if(!$this->check_type($file)){	#检查文件名是未合要求
				return 3;
			}
		}
		for ($i=0;$i<$img_num;$i++){
			$tmp_file=$upload['tmp_name'][$i];
			$file=$upload['name'][$i];
			$type=strtolower(substr($file,strrpos($file,".")+1));
			$new_name=is_null($name)?date("YmdHis").$this->num.'.'.$type:$name;
			$dir=is_null($path)?$this->dir:$path;
			$this->num++;
			if (move_uploaded_file($tmp_file,DOCUMENT_ROOT.'/'.$dir.'/'.$new_name)){
				array_push($file_name,$new_name);
			}else{
				return 0;
			}
		}
		return $file_name;
	}
	#设置单个文件的文件名
	function set_file_name($name){
		$this->file_name=$name;
	}
}
?>